Gogs+Drone持续集成(CI/CD)入坑详细指南 |
您所在的位置:网站首页 › delivery drones是什么 › Gogs+Drone持续集成(CI/CD)入坑详细指南 |
背景
近期在公司内部部署CI/CD平台, 经过比较Jenkins和Drone, 基于Drone的优点最终选择了Drone. 一开始也尝试使用docker部署Jenkins, 部署过程中下载插件失败(估计是伟大的墙的原因), 最后直接放弃并尝试部署Drone. 没想到搜遍全网, 相关资料甚少, 能用的drone版本也很老旧. 随后只能一步步看官方文档进行部署, 但是部署过程中发现官方文档也写得不明不白, 遇到了一堆坑. 最后解决问题, 特此记录下来, 供大家参考. 官方文档是使用docker的方式安装, 网上也有博文说使用docker-compose安装失败. 这里先做声明: 不管哪种方式其实都是可以的, 我会先使用docker的方式安装一遍, 最后再提供一个docker-compose文件给大家享用. (我本地是直接使用docker-compose运行的) 安装Gogs这里不做说明, 看到这篇文章, 相信大家已经安装好Gogs了, 没有安装的可查找相关博文或看官方文档安装, 这个不难, 也没什么坑(如果使用docker安装, 填写MySQL地址使用外部可访问的网络地址, 建议docker服务设置别名). 安装启动drone调试阶段建议启动设置detach=false, 这样可以查看日志输出 docker run \ --volume=/var/lib/drone:/data \ --env=DRONE_DEBUG=true\ --env=DRONE_LOGS_TRACE=true\ --env=DRONE_LOGS_DEBUG=true\ --env=DRONE_LOGS_PRETTY=true\ --env=DRONE_AGENTS_ENABLED=true \ --env=DRONE_GIT_ALWAYS_AUTH=true \ --env=DRONE_RPC_SECRET=bca6ae9c4bc3022eb59f19642167068b \ --env=DRONE_SERVER_HOST=192.168.0.201:10080 \ --env=DRONE_SERVER_PROTO=http \ --env=DRONE_GOGS_SERVER=http://192.168.0.201:3000 \ --env=DRONE_USER_CREATE=username:admin,admin:true \ --publish=10080:80 \ --publish=10443:443 \ --restart=always \ --detach=false \ --name=drone \ drone/drone:1环境变量配置说明 DRONE_GOGS_SERVER : Gogs服务地址(建议填写宿主机地址+端口, 需要http://开头)DRONE_GIT_ALWAYS_AUTH: 是否每次都要验证DRONE_RPC_SECRET: Drone服务密匙(后面安装runner使用相同的秘钥)DRONE_SERVER_HOST: Drone服务地址,外部可访问的域名或IP地址(建议填写宿主机地址+端口, 不需要http://开头)DRONE_SERVER_PROTO: Drone提供服务的协议类型,可选为http或httpsDRONE_USER_CREATE: 设置Drone管理员账号(注意设置的是Gogs平台里的账号), Drone是直接使用Gogs账号登录的其他相关DEBUG参数建议开启 安装Drone-runnerdrone-runner分几种, 每一种是不一样的, 但是可同时存在. 这里我会同时安装两种类型的runner(ssh和docker) 安装启动drone-runner-ssh docker run -d \ -e DRONE_RPC_PROTO=http \ -e DRONE_RPC_HOST=192.168.0.201:10080 \ -e DRONE_RPC_SECRET=bca6ae9c4bc3022eb59f19642167068b \ -e DRONE_DEBUG=true \ -p 10081:3000 \ --restart always \ --name ssh-runner \ drone/drone-runner-ssh环境变量配置说明 DRONE_RPC_SECRET: Drone服务密匙(后面安装runner使用相同的秘钥)DRONE_RPC_HOST: Drone服务地址,外部可访问的域名或IP地址(建议填写宿主机地址+端口, 不需要http://开头)DRONE_RPC_PROTO: Drone提供服务的协议类型,可选为http或https 安装启动drone-runner-docker docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ -e DRONE_RPC_PROTO=http \ -e DRONE_RPC_HOST=192.168.0.201:10080 \ -e DRONE_RPC_SECRET=bca6ae9c4bc3022eb59f19642167068b \ -e DRONE_RUNNER_CAPACITY=2 \ -e DRONE_RUNNER_NAME=docker-runner \ -e DRONE_DEBUG=true \ -p 10082:3000 \ --restart always \ --name docker-runner \ drone/drone-runner-docker:1到此, 如无意外, 服务基本安装成功了. 打开浏览器访问一下地址: http://192.168.0.201:10080出现一下登录界面: 例如: kind: pipeline type: docker name: default steps: - name: build image: golang volumes: - name: docker path: /var/run/docker.sock commands: - go build volumes: - name: docker host: path: /var/run/docker.sock上图点击保存后, Drone会在Gogs对应项目设置Webhook 登录Gogs平台查看
新增并激活ssh项目(同上) 另外新增一个Secrets, Secrets用于保存一些敏感信息, 供.drone.yml使用. kind: pipeline type: ssh # 使用SSH name: default server: host: 192.168.0.201 user: root password: from_secret: rootpass # Secrets保存的密码 steps: - name: build commands: - echo Hello Drone!! - df -h - pwd - ls -l - go version - go buildcommit&push项目文件, 查看部署情况, 可以看到是ssh在远程服务器执行命令 修改一下.drone.yml文件, 重新commit&push项目文件, 查看部署情况 以上只是一些简单例子, 详细的可自行编写 使用docker-compose一键启动服务 version: "3.8" services: gogs: image: gogs/gogs container_name: my-gogs restart: always networks: dronenet: aliases: - gogs volumes: - /data1/mygogs:/data ports: - "10022:22" - "3000:3000" drone: # 参考文档 https://docs.drone.io/server/provider/gogs/ image: drone/drone:1 container_name: my-drone restart: always ports: - 10080:80 - 10443:443 networks: dronenet: aliases: - drone volumes: - /var/run/docker.sock:/var/run/docker.sock - /data1/drone/:/var/lib/drone environment: - TZ=Asia/Shanghai - DRONE_DEBUG=true - DRONE_LOGS_TRACE=true - DRONE_LOGS_DEBUG=true - DRONE_LOGS_PRETTY=true - DRONE_GIT_ALWAYS_AUTH=false - DRONE_RPC_SECRET=bca6ae9c4bc3022eb59f19642167068b - DRONE_SERVER_HOST=192.168.0.201:10080 - DRONE_SERVER_PROTO=http - DRONE_GOGS_SERVER=http://192.168.0.201:3000 - DRONE_USER_CREATE=username:admin,admin:true drone-sshrunner: # docker类型的pipeline必须安装运行drone-runner-ssh # 参考文档 https://docs.drone.io/runner/ssh/overview/ image: drone/drone-runner-ssh container_name: my-drone-sshrunner restart: always ports: - 10081:3000 depends_on: - drone networks: dronenet: aliases: - drone-sshrunner volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - TZ=Asia/Shanghai - DRONE_DEBUG=true - DRONE_RPC_SECRET=bca6ae9c4bc3022eb59f19642167068b - DRONE_RPC_HOST=192.168.0.201:10080 - DRONE_RPC_PROTO=http - DRONE_RUNNER_CAPACITY=2 - DRONE_RUNNER_NAME=drone-sshrunner drone-runner: # docker类型的pipeline必须安装运行drone-runner-docker # 参考文档 https://docs.drone.io/runner/docker/overview/ image: drone/drone-runner-docker:1 container_name: my-drone-runner restart: always ports: - 10082:3000 depends_on: - drone networks: dronenet: aliases: - drone-runner volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - TZ=Asia/Shanghai - DRONE_DEBUG=true - DRONE_RPC_SECRET=bca6ae9c4bc3022eb59f19642167068b - DRONE_RPC_HOST=192.168.0.201:10080 - DRONE_RPC_PROTO=http - DRONE_RUNNER_CAPACITY=2 - DRONE_RUNNER_NAME=drone-runner networks: dronenet: external: true # 使用外部网络, 需先创建网络运行服务 docker-compose up运行单个服务 docker-compose up drone docker-compose up drone-runner docker-compose up drone-sshrunner停止服务 docker-compose stop停止单个服务 docker-compose stop drone docker-compose stop drone-runner docker-compose stop drone-sshrunner 感想Drone 还是挺好用的, 搭建和上手速度都很快, 特别是熟悉docker的同学. 只是官方文档不够详细, 社区生态不是很好. 网上可参考的资料比较少. 可能中国用的人比较少. 写这篇文章: 希望可以帮助到需要的同学, 带动生态的发展 参考文档: Drone官方文档 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |